// 1. 引入 Node.js 内置模块：http（创建服务）、fs（读取图片文件）、path（处理文件路径）
const http = require('http');
const fs = require('fs');
const path = require('path');

// 2. 定义图片文件路径（需提前准备一张图片，此处以 "book.jpg" 为例，与脚本同目录）
const imgPath = path.join(__dirname, 'book.jpg'); // __dirname 是当前脚本所在目录

// 3. 创建 HTTP 服务
const server = http.createServer((req, res) => {
  // 仅处理根路径请求（localhost:8081/）
  if (req.url === '/' && req.method === 'GET') {
    try {
      // 3.1 读取图片文件（同步读取，简化逻辑；生产环境建议用异步）
      // 读取为 Buffer 格式（binary 二进制模式）
      const imgBuffer = fs.readFileSync(imgPath, 'binary');
      
      // 3.2 将图片 Buffer 转换为 Base64 编码（需先转为 UTF-8 字符串）
      const imgBase64 = Buffer.from(imgBuffer, 'binary').toString('base64');
      
      // 3.3 构造 HTML 内容：包含 Base64 图片（data URI 格式：data:image/jpeg;base64,编码内容）
      const html = `
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
          <meta charset="UTF-8">
          <title>Buffer 图片示例</title>
          <style>
            h1 { text-align: center; color: #333; }
            img { display: block; margin: 20px auto; width: 300px; }
          </style>
        </head>
        <body>
          <h1>深入浅出 Node.js</h1>
          <img src="data:image/jpeg;base64,${imgBase64}" alt="Node.js 书籍封面">
          <p style="text-align: center; color: #666;">作者：朴灵 | 出版社：人民邮电出版社</p>
        </body>
        </html>
      `;

      // 3.4 响应 HTML 页面（设置响应头：内容类型为 HTML，编码为 UTF-8）
      res.writeHead(200, {
        'Content-Type': 'text/html; charset=utf-8',
        'Content-Length': Buffer.byteLength(html, 'utf8') // 计算 HTML 内容长度
      });
      res.end(html); // 发送 HTML 并结束响应

    } catch (error) {
      // 处理图片读取失败（如文件不存在、权限不足）
      res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
      res.end(`服务器错误：图片读取失败！\n错误详情：${error.message}`);
    }
  } else {
    // 处理非根路径请求（404 未找到）
    res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end('404 页面未找到！请访问：http://localhost:8081');
  }
});

// 4. 启动服务，监听 8081 端口
server.listen(8081, () => {
  console.log('HTTP 服务已启动！请在浏览器访问：http://localhost:8081');
});

// 5. 监听服务错误（如端口被占用）
server.on('error', (error) => {
  if (error.code === 'EADDRINUSE') {
    console.error('错误：8081 端口已被占用，请关闭其他占用该端口的程序后重试！');
  } else {
    console.error('服务启动失败：', error.message);
  }
});